/**
 * 根据给定的键数组，在数据中查找对应键的名称，并以逗号分隔的形式返回
 * @param {Array} keyArr - 要查找的键数组
 * @param {Array} data - 包含键和名称的数据数组
 * @param {string} [dataKey='itemValue'] - 数据中表示键的属性名
 * @param {string} [dataName='itemText'] - 数据中表示名称的属性名
 * @returns {string} 逗号分隔的键名称字符串
 */
export const getNameOfKey = (keyArr, data, dataKey = 'itemValue', dataName = 'itemText') => {
  let keyName = ''
  keyArr.forEach((item, index) => {
    if (index === 0) {
      data.forEach((dataItem) => {
        if (item === dataItem[dataKey]) {
          keyName += dataItem[dataName]
        }
      })
    } else {
      data.forEach((dataItem) => {
        if (item === dataItem[dataKey]) {
          keyName += ',' + dataItem[dataName]
        }
      })
    }
  })
  return keyName
}

/**
 * 计算两个时间之间的时长，并返回格式化后的时长字符串
 * @param {string} startDateTime - 开始时间字符串（格式：YYYY-MM-DD HH:mm:ss）
 * @param {string} endDateTime - 结束时间字符串（格式：YYYY-MM-DD HH:mm:ss）
 * @returns {string} 格式化后的时长字符串（HH:mm:ss）
 */
export const calculateDuration = (startDateTime, endDateTime) => {
  // 将字符串时间转换为日期对象
  const endDate = new Date(endDateTime)
  const startDate = new Date(startDateTime)

  // 计算时间差（单位：秒）
  const diffInSeconds = Math.floor((endDate - startDate) / 1000)

  // 计算时、分、秒
  const hours = Math.floor(diffInSeconds / 3600)
  const minutes = Math.floor((diffInSeconds % 3600) / 60)
  const seconds = diffInSeconds % 60

  // 返回格式化后的时长字符串
  return `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`
}

/**
 * 在数字前补零，使其达到两位数
 * @param {number} value - 要补零的数字
 * @returns {string} 补零后的字符串
 */
function padZero(value) {
  return value < 10 ? `0${value}` : `${value}`
}

/**
 * 处理信息数据的函数
 * @param {Object} baseData - 原始数据对象
 * @param {Array} targetData - 目标数据数组，每个元素包含 key、value、unit 等属性
 * @returns {Array} 处理后的目标数据数组
 */
export const processInfoData = (baseData, targetData) => {
  targetData.forEach((target) => {
    if (baseData[target.key] !== undefined && baseData[target.key] !== null) {
      target.value = baseData[target.key] + (target.unit ? target.unit : '')
    } else if (!target.value) {
      target.value = '--'
    }
  })
  return targetData
}
